As mentioned earlier, Supercite uses various frames to perform
certain jobs such as mail header information extraction and mail
header nuking. However, these frames are not available for you to
customize, except through abstract interfaces such as
sc-nuke-mail-header, et al.
However, the
citation frames Supercite uses provide a lot of customizing power
and are thus available to you to change to suit your needs. The
workhorse of citation is the frame contained in the variable
sc-default-cite-frame. This frame recognizes many
situations, such as blank lines, which it interprets as paragraph
separators. It also recognizes previously cited nested and
non-nested citations in the original message. By default it will
coerce non-nested citations into your preferred citation style,
and it will add a level of citation to nested citations. It will
also simply cite uncited lines in your preferred style.
In a similar
vein, there are default frames for unciting and
reciting, contained in the variables
sc-default-uncite-frame and
sc-default-recite-frame respectively.
As mentioned earlier (see Recognizing
Citations), citations are recognized through the values of
the regular expressions sc-citation-root-regexp, et
al. To recognize odd styles, you could modify these variables, or
you could modify the default citing frame. Alternatively, you
could set up association lists of frames for recognizing specific
alternative forms.
For each of the
actions – citing, unciting, and reciting – an alist
is consulted to find the frame to use
(sc-cite-frame-alist,
sc-uncite-frame-alist, and
sc-recite-frame-alist respectively). These frames
can contain alists of the form:
((infokey (regexp . frame) (regexp . frame) ...)
(infokey (regexp . frame) (regexp . frame) ...)
(...))
Where infokey is a
key suitable for sc-mail-field, regexp is
a regular expression which is string-match'd against
the value of the sc-mail-field key, and
frame is the frame to use if a match occurred.
frame can be a variable containing a frame or a frame
in-lined.
When Supercite is about to cite, uncite, or recite a region, it consults the appropriate alist and attempts to find a frame to use. If one is not found from the alist, then the appropriate default frame is used.